package com.toolbox.dal.repository.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.toolbox.dal.repository.InfraLogLoginDORepository;
import com.toolbox.dto.InfraLogLoginDTO;
import com.toolbox.dal.mapper.InfraLogLoginMapper;
import com.toolbox.dal.model.InfraLogLoginDO;
import com.toolbox.pages.Pager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Comparator;
import java.util.stream.Collectors;

import static com.toolbox.pages.PageUtil.convert;
import static com.toolbox.pages.PageUtil.defaultObjWhenEmpty;

/**
 * <p>
 * 登录日志表 服务实现类
 * </p>
 *
 * @author Mango
 * @since 2023-12-01
 */
@SuppressWarnings("ALL")
@Slf4j
@Service
public class InfraLogLoginDORepositoryImpl extends ServiceImpl<InfraLogLoginMapper, InfraLogLoginDO> implements InfraLogLoginDORepository {

    @Autowired
    private InfraLogLoginMapper mapper;

    @Override
    public Pager<InfraLogLoginDTO> getLoginLogPage(Integer pageIndex, Integer pageSize) {
        QueryWrapper<InfraLogLoginDO> queryWrapper = new QueryWrapper<>();

        queryWrapper.lambda().orderByDesc(InfraLogLoginDO::getId);

        Page<InfraLogLoginDO> page = mapper.selectPage(new Page<InfraLogLoginDO>(pageIndex, pageSize), queryWrapper);

        if (page.getRecords().isEmpty()) {
            return defaultObjWhenEmpty();
        }

        return convert(page.getTotal(), page.getCurrent(), page.getSize(),
                page.getRecords().stream().map(this::doToDto).sorted(Comparator.comparing(InfraLogLoginDTO::getId)).collect(Collectors.toList()));

    }

    /**
     * DO 转换 DTO
     *
     * @param dos
     * @return
     */
    private InfraLogLoginDTO doToDto(InfraLogLoginDO dos) {
        InfraLogLoginDTO dto = new InfraLogLoginDTO();
        BeanUtils.copyProperties(dos, dto);
        return dto;
    }

}
